const Koa = require('koa')
const app = new Koa();
const Router = require('@koa/router')
const router = new Router();
const bodyParser = require('koa-bodyparser');
const userList = require('./mock/user.json')
const JWT = require('jsonwebtoken')
const key = 'qwerthgfedq234er'

let { order } = require('./mock/order')
// 处理 json
app.use(bodyParser());

// 登录接口
router.post('/login', ctx => {
  // 1. 获取用户名和密码
  const {
    username,
    password
  } = ctx.request.body;
  // 2. 验证用户是否存在
  const isUser = userList.find(v => v.username === username);
  if (isUser) {

    // 3. 验证用户和密码同时是否存在
    if (isUser.password === password) {
      // 复制用户信息哦
      const data = { ...isUser };
      // 删除密码字段
      delete data.password
      // 返回结果
      ctx.body = {
        code: 200,
        message: '登录成功， 欢迎' + isUser.nickname + '用户！',
        data: {
          userInfo: data,
          token: JWT.sign(data, key)
        }
      }
    } else {
      // 返回结果
      ctx.body = {
        code: 401,
        message: '账户密码错误， 请重新输入'
      }
    }

  } else {
    // 返回结果
    ctx.body = {
      code: 400,
      message: '该用户不存在， 请先注册'
    }
  }

})

// 订单列表接口
router.get('/order', ctx => {
  const { q } = ctx.request.query;
  if(q) {
    ctx.body = {
      code: 200,
      data: order.filter(v => JSON.stringify(v).includes(q)),
      message: 'ok'
    }
  } else {
    ctx.body = {
      code: 200,
      data: order,
      message: 'ok'
    }
  }
 
})

// 订单列表删除接口 ｜ 支持多项删除
// id = 1
// id = 1,2,3,4,5,6
router.delete('/order/:id', ctx => {
  // 1. 获取动态路由id
  const { id } = ctx.request.params;
  // 2. 通过ID进行过滤删除
  order = order.filter(v => !id.includes(v.id));
  // 3. 返回结果
  ctx.body = {
    code: 200,
    message: '删除成功'
  }
})

// 编辑接口
router.post('/order/:id', ctx => {
  // 1. 获取后端动态路由 id
  const { id } = ctx.request.params;
  
  // 2. 根据 id 查找
  const item = order.find(v => v.id === id);
  // 3. 判断
  if(item) {
    // 获取新数据
    const data = ctx.request.body;

    // 新数据覆盖旧数据
    Object.assign(item, data);
    ctx.body = {
      code: 200,
      message: '修改成功'
    }
  } else {
    ctx.body = {
      code: 400,
      message: '参数 id 未找到'
    }
  }
})  

// 订单状态统计接口
router.get('/list/echarts', ctx => {
  const x = ["待付款", "待发货", "待收货", "待评价", "已完成"]
  const y = [0, 0, 0, 0, 0];
  order.forEach(item => {
    const index = x.findIndex(v => v === item.state);
    if(index !== -1) {
      y[index]++
    }
  })


  ctx.body = {
    code: 200,
    data: { x, y }
  }
})


app
  .use(router.routes())
  .use(router.allowedMethods())

app.listen(1234, () => console.log('后端服务器在1234端口启动'))